package com.istock.union.user.service;

import java.util.List;

import com.istock.base.common.api.model.PageInfo;
import com.istock.union.user.model.RoleInfo;
import com.istock.union.user.model.RoleInfoModel;
import com.istock.union.user.model.RoleInfoQueryModel;

public interface RoleInfoService {

	/**
	 * 分页查询角色信息
	 * 
	 * @param role
	 * @param page
	 * @return
	 */
	public List<RoleInfo> selectRoleListByPage(RoleInfoQueryModel role, PageInfo<RoleInfo> page);

	/**
	 * 查询角色信息
	 * 
	 * @param role
	 * @param page
	 */
	public List<RoleInfo> selectRoleList(RoleInfoQueryModel role);
	
	/**
	 * 新增角色和关联信息
	 * 
	 * @param role
	 * @return
	 */
	public void insertRole(RoleInfoModel role);

	/**
	 * 批量插入
	 * 
	 * @param roleId
	 * @return
	 * @throws Exception 
	 */
	public int batchInsertRoleMenus(String roleId, List<String> menuIds) throws Exception;

	/**
	 * 根据ID查询角色信息
	 * 
	 * @param id
	 * @return
	 */
	public RoleInfo selectRoleById(String id);

	/**
	 * 
	 * @param dept
	 * @return
	 */
	public void updateRole(RoleInfoModel role);

	/**
	 * 更新角色信息
	 * 
	 * @param role
	 * @return
	 */
	public int updateRoleInfo(RoleInfo role);

	/**
	 * 根据ID批量删除角色
	 * 
	 * @param ids
	 */
	public void deleteRoleByIds(String ids);

	/**
	 * 通过角色ID查询角色使用数量
	 * 
	 * @param roleId
	 * @return
	 */
	public long countRoleUsersByRoleId(String roleId) ;

	/**
	 * 校验角色名称是否已存在
	 * 
	 * @param role
	 * @return
	 */
	public Boolean checkRoleNameUnique(RoleInfo role);

	/**
	 * 校验角色KEY是否存在
	 * 
	 * @param role
	 * @return
	 */
	public Boolean checkRoleKeyUnique(RoleInfo role);

	/**
	 * 根据用户ID查询角色信息
	 * 会返回用户所在租户下所有角色
	 * 
	 * @param userId
	 * @return
	 */
	public List<RoleInfoModel> selectRolesByUserId(String userId);

	/**
	 * 根据用户ID查询用户角色信息
	 * 
	 * @param userId
	 * @return
	 */
	public List<RoleInfo> selectUserRolesByUserId(String userId);
	
	/**根据身份查询当前身份的角色列表
	 * @param credentialId
	 * @return
	 */
	public List<RoleInfo> selectCredentialRole(String credentialId);
	
	/**返回user_role表中对应userId的roleId
	 * @param userId
	 * @return
	 */
	public List<String> findRoleIdByUser(String userId);
}
